function MSTreeViewControl() {


    /**
    * Control css prefix
    *
    * @private
    * @property   cssPrefix
    * @type       {String}
    * @default    TreeControl
    */
    this.cssPrefix = "TreeViewControl";
    
    /**
    * Collection of TreeViewElement objects (tree views)
    *
    * @private
    * @property  controls
    * @type      List
    * @default   empty list
    */
    this.controls = new List();

    /**
    * tree node description object
    *
    * @private
    * @property  nodeDescriptionDom
    * @type      DOM
    */
    this.nodeDescriptionDom = null;
    this.nodeDescriptionInitialized = false;

    
    
    this.CONTAINER_CSS_CLASS = "TreeViewControl";
    this.NODE_DESCRIPTION = "NodeDescription";
}
MSTreeViewControl.prototype = new MessUIElement();
MessUIElement.prototype.addTagMapping("treeView", "MSTreeViewControl");


    /**
    * Builds MSTreeViewControl object. Performs all necessary initialization.
    *
    * @public
    * @method  build
    */
    MSTreeViewControl.prototype.build = function() {

        // initialize control
        this.initControl();

        // build dom
        this.buildDOMObject();
    };

    /**
    * Builds DOM object MSTreeViewControl representation
    *
    * @private
    * @method   buildDOMObject
    */
    MSTreeViewControl.prototype.buildDOMObject = function() {

		// build container
        var container = this.buildContainerDOM();

        // save dom object
		this.domObject = container;
		
		// update dimensions
        this.setDomObject(this.domObject);
    };

	/**
	 * Builds container dom representation
	 * 
	 * @private
	 * @method  buildContainerDOM
	 * @return  {DOM}  dom object
	 */
	MSTreeViewControl.prototype.buildContainerDOM = function() {
		
		var container = DIV();
            container.id = this.id;
            container.className = this.getContainerCssClass();

            // create node description
            this.nodeDescriptionDom = DIV();
            this.nodeDescriptionDom.className = container.className + this.NODE_DESCRIPTION;

        container.appendChild(this.nodeDescriptionDom);
        return container;
	};
	
	/**
	 * Sets tree container base css class name
	 * 
	 * @private
	 * @method  getContainerCssClass
	 * @return  {String} class name
	 */
	MSTreeViewControl.prototype.getContainerCssClass = function() {
		
		return this.getCssPrefix();
	};

    /**
    * Builds child controls, recursive.
    *
    * @private
    * @method   buildChildControls
    */
    MSTreeViewControl.prototype.buildChildControls = function() {

        for (var it = this.controls.iterator(); it.hasNext();) {

            // build control and add to dom tree
            var control = this.buildChildControlObject(it.next());
            this.domObject.appendChild( control.render() );
        }
    };

    /**
    * Sets control width
    *
    * @public
    * @method  setControlWidth
    * @param   {Number} width  width to be set
    */
    MSTreeViewControl.prototype.setControlWidth = function(width) {

        this.setWidth( width );
        this.nodeDescriptionInitialized = false;
    };

    /**
    * Sets control height
    *
    * @public
    * @method  setControlHeight
    * @param   {Number} height  height to be set
    */
    MSTreeViewControl.prototype.setControlHeight = function(height) {

        this.setHeight( height );
        this.nodeDescriptionInitialized = false;
    };

    /**
    * Adds new 'child' TreeViewElement object
    *
    * @public
    * @method  addControl
    * @param   {TreeViewElement} control  tree object to add to local collection
    */
    MSTreeViewControl.prototype.addControl = function(control) {

        this.controls.add( control );
        return control;
    };

    /**
    * Returns collection of stored TreeViewElement object
    *
    * @public
    * @method  getControls
    * @return  {List} collection of controls
    */
    MSTreeViewControl.prototype.getControls = function() {

        return this.controls;
    };

    /**
    * Set node description. Called from child node receiving onMouseOver event
    *
    * @public
    * @method  setNodeDescription
    * @param   {String} desc   desc string to set
    */
    MSTreeViewControl.prototype.showNodeDescription = function(desc) {

        // reset floating description sie & position
        if (!this.nodeDescriptionInitialized) {
            this.setWidth(this.getWidth(), this.nodeDescriptionDom);
            this.setLeft(this.getOffsetLeft(this.domObject), this.nodeDescriptionDom);
            this.setTop(this.getOffsetTop(this.domObject) + this.getHeight() - 13, this.nodeDescriptionDom);

            this.nodeDescriptionInitialized = true;
        }

        if (desc === null) {
        // hide description element
            this.hide(this.nodeDescriptionDom);
        }
        else {
            // set description
            this.nodeDescriptionDom.innerHTML = '&nbsp;&nbsp;'+desc;
            this.show(this.nodeDescriptionDom);
        }
    };






